传送门
巨佬zyd出的一道题

裴蜀定理:对于正整数a,ba,b,方程ax+by=cax+by=c有解的充分必要条件为gcd(a,b)cgcd(a,b)|c

我们设gcd(a,b)=dgcd(a,b)=dad=a\frac{a}d = a′bd=b\frac{b}d = b′cd=c\frac{c}d = c′
首先证明充分条件:
gcd(a,b)cgcd(a,b)|ccc′为整数,
原方程两边同时除以dd,方程化为:ax+by=ca′x+b′y=c′,即ax=c(modb)a′x=c′ \pmod {b′}
显然a,ba′,b′两两互质,根据extgcd,我们知道这个方程一定有整数解。
充分性得证

再证明必要条件:
用反证法
gcd(a,b)cgcd(a,b)不整除ccc'不为整数,
原方程两边同时除以dd,方程化为:ax+by=ca′x+b′y=c′
等式左边为整数,右边不为整数,所以无解。
必要性得证


回到本题,发现这是一种裴蜀定理推广到nn个数的情况
a1x1+a2x2+a3x3...anxn=ba_1x_1+a_2x_2+a_3x_3...a_nx_n=b有解的充分必要条件为gcd(a1,a2,a3...an)bgcd(a_1,a_2,a_3...a_n)|b
又因为bb为正整数,所以bmin=gcd(a1,a2,a3...an)b_{min}=gcd(a_1,a_2,a_3...a_n)

代码:

// luogu-judger-enable-o2
#include <bits/stdc++.h>
using namespace std;
inline int read(){//这个read自动忽略负数
    int x=0;
    char ch=getchar();
    while (ch<'0'||ch>'9'){
        ch=getchar();
    }
    while (ch>='0'&&ch<='9'){
        x=(x<<3)+(x<<1)+(ch^'0');
        ch=getchar();
    }
    return x;
}
int gcd(int jzm,int xjp){
    return jzm%xjp==0?xjp:gcd(xjp,jzm%xjp);
}
int main(){
    int n=read();
    int ans=read();
    for (register int i=2;i<=n;++i){
        ans=gcd(ans,read());
    }
    printf("%d\n",ans);
}